/*
 * @author: huangww
 * @Date: 2021-02-22 14:41:44
 * @LastEditTime: 2021-03-01 17:01:57
 * @FilePath: \fmgr\src\core\base\Component.ts
 */
namespace core {
    export abstract class Component extends eui.Component implements IComponent {
        UIType: COMPONENTTYPE;
        res: string | LoadGroup;
        constructor(type: COMPONENTTYPE, name: string = "") {
            super();
            this.UIType = type;
            this.name = name;
            this.setResGroup();
        }
        /**
         * 在component 执行添加到舞台之前，UIMgr 将会先加载this.res
         * 当需要加载资源组时重写该函数
         */
        setResGroup() {
            this.res = null;
        }

        /**界面加载完毕回调 */
        protected createChildren() {
            if (this.UIType == COMPONENTTYPE.UI) {
                this.openUIAction();
            } else if (this.UIType == COMPONENTTYPE.WINDOW) {
                this.openWinAction();
            }
            this.init();
        }
        /**界面加载完毕初始化 */
        init() {
            this.initEvent();
            this.initCmd();
        }
        /**
         * 注册通信消息监听
         */
        initCmd() { };

        /**监听事件注册 */
        initEvent() { };

        /**监听事件注销以及持有的一些对象移除 */
        abstract release();

        /**控制界面显隐，之后做动效扩展  */
        active(show: boolean) {
            if (show) {
                this.visible = true;
            } else {
                this.visible = false;
            }
        }
        /**播放展示动画
         * 子类可以重写该方法达到子类单独效果
         */
        openUIAction() {
            this.scaleX = this.scaleY = 0;
            egret.Tween.get(this)
                .wait(200)
                .to({ scaleX: 1, scaleY: 1 }, 300, egret.Ease.backOut);
        }
        openWinAction() {

        }
        /**界面移除执行函数 */
        onClose() {
            UIMgr.getInstance().close(this);
        }

        clear() {
            EventMgr.getInstance().remove(this);
            CMDMgr.getInstance().remove(this);
            this.res = null;
        }


    }
}